//package com.mynetwork.utils;
//
//import java.io.File;
//import java.io.FilterInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.Serializable;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.Iterator;
//
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.HttpStatus;
//import org.apache.http.client.HttpClient;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.impl.client.DefaultHttpClient;
//
//import com.mynetwork.data.AppData;
//import com.mynetwork.data.ContentInfo;
//
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.os.AsyncTask;
//import android.os.Handler;
//import android.text.TextUtils;
//import android.util.Log;
//import android.widget.ImageView;
//
//public class BitmapDownloadManager {
//	private static final String TAG = "BitmapDownloadManager";
//    public HashMap<String,Bitmap> mBitmapCache = new HashMap<String,Bitmap>();
//    private ArrayList<ImageAsyncTask> mTaskQueue = new ArrayList<ImageAsyncTask>();
//    public static final int TYPE_WISH_DATA = 1;
//    private boolean isQueue = false;
//	public interface OnDownloadListener {
//		void onDownloadFinish(TaskInfo taskInfo,Bitmap bmp);
//	}
//    
//    public void downloadImage(ImageView view, String url, Serializable data,OnDownloadListener l) {
//    	if (TextUtils.isEmpty(url)) {
//    		return;
//    	}
//    	downloadImage(view,true,url,data,0,0,l);
//    }
//    
//    public void downloadImage(ImageView view, boolean isReflect, String url,Serializable data, int maxWidth, int maxHeight, OnDownloadListener l) {
//    	if (TextUtils.isEmpty(url)) {
//    		return;
//    	}
//    	if (isReflect)
//    		url += "_r";
//    	if (mBitmapCache.get(url) != null) {
//    		view.setImageBitmap(mBitmapCache.get(url));
//    		if (l != null) {
//				l.onDownloadFinish(new TaskInfo(view,isReflect,url,data),mBitmapCache.get(url));
//			}
//    		return;
//		} 
//    	if (isQueue) {
//	    	mTaskQueue.add(new ImageAsyncTask(new TaskInfo(view,isReflect,url,data),maxWidth,maxHeight,l));
//	    	if (mTaskQueue.size() == 1) 
//	    		mTaskQueue.get(0).execute();
//    	} else {
//        	(new ImageAsyncTask(new TaskInfo(view,isReflect,url,data),maxWidth,maxHeight,l)).execute();
//    	}
//    }
//    
//    public boolean isCache(String url) {
//    	if (mBitmapCache.get(url) != null)
//    		return true;
//    	return false;
//    			
//    }
//    public class TaskInfo {
//    	public ImageView mImageView;
//    	public boolean mIsReflect;
//    	public String ImageUrl;
//    	public Serializable mInfo;
//    	public String mLocalPath;
//    	public TaskInfo(ImageView view,boolean isReflect, String path,Serializable info) {
//    		mImageView = view;
//    		mIsReflect = isReflect;
//    		ImageUrl = path;
//    		mInfo = info;
//    		mLocalPath = getLocalPath();
////    		Log.e("mLocalPath", mLocalPath);
//    	}
//    	
//    	public String getLocalPath() {
//    		String path = null;
//			if (mInfo instanceof ContentInfo) {
//	    		path = AppData.CONTENT_IMAGE_BACKUP_PATH + ImageUrl.substring(ImageUrl.lastIndexOf("/"), ImageUrl.length());
//			} else 
//				path = ImageUrl;
//			
//			if (isLocal()) {
//				setIsLocal(FileUtils.fileIsLive(path));
//			}
//			return path;
//    	}
//
//    	public boolean isLocal() {
//    		if (mInfo != null) {
//        		if (mInfo instanceof ContentInfo) {
//        			for (int i = 0; i < ((ContentInfo)mInfo).imgUrls.size(); i++) {
//        				if (ImageUrl.equals(((ContentInfo)mInfo).imgUrls.get(i)))
//            				return ((ContentInfo)mInfo).mIsMainLocalBackup;
//					}
//        		} else if (mInfo instanceof Integer) {
//        			if (mLocalPath != null && mLocalPath.indexOf("http://") >= 0) {
//        				return false;
//        			} else 
//        				return true;
//        		}
//        		return false;
//    		} else	//scrap와 같이 info class가 없는 경우는 무조건 local에 있는 것
//    			return true;
//    	}
//    	
//    	public void setIsLocal(boolean isLocal) {
//    		if (mInfo != null) {
//        		if (mInfo instanceof ContentInfo) {
//        			for (int i = 0; i < ((ContentInfo)mInfo).imgUrls.size(); i++) {
//        				if (ImageUrl.equals(((ContentInfo)mInfo).imgUrls.get(i)))
//            				((ContentInfo)mInfo).mIsMainLocalBackup = isLocal;
//					}
//        		}
//    		}
//    	}
//    }
//    
//	protected class ImageAsyncTask extends AsyncTask<Object, Object, Bitmap>{
//		private TaskInfo mInfo;
//		private int mMaxWidth = 0;
//		private int mMaxHeight = 0;
//		private OnDownloadListener mOnDownloadListener;
//		public ImageAsyncTask(TaskInfo info,int maxWidth, int maxHeight,OnDownloadListener l) {
//			mInfo = info;
//			mMaxWidth = maxWidth;
//			mMaxHeight = maxHeight;
//			mOnDownloadListener = l;
//		}
//		
//		@Override
//		protected Bitmap doInBackground(Object... params) {
//			if (mInfo.isLocal()) {
//				Bitmap bmp = ImageUtils.getScaleImageBitmap(mInfo.mLocalPath,mMaxWidth,mMaxHeight);
//				if (mBitmapCache != null && mBitmapCache.get(mInfo.ImageUrl) == null) {
//					mBitmapCache.put(mInfo.ImageUrl, bmp);
//				}
//				return bmp;
//			} else {
//				return getNetworkBitmap();
//			}
//		}
//		
//		private Bitmap getNetworkBitmap() {
//			final HttpClient client = new DefaultHttpClient();
//	    	if (mInfo.mIsReflect)
//	    		mInfo.ImageUrl = mInfo.ImageUrl.substring(0, mInfo.ImageUrl.length()-2);
//			final HttpGet getRequest = new HttpGet(mInfo.ImageUrl);
//		
//			try {
//				HttpResponse response = client.execute(getRequest);
//				final int statusCode = response.getStatusLine().getStatusCode();
//				if(statusCode != HttpStatus.SC_OK) {
//					Log.w("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + mInfo.ImageUrl);
//					return null;
//				}
//			
//				final HttpEntity entity = response.getEntity();
//				if(entity != null) {
//					InputStream inputStream = null;
//					Bitmap bitmap;
//					try {
//						inputStream = entity.getContent();
//						bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
//						if (mInfo.mIsReflect)
//							bitmap = ImageUtils.makeReflectedImages(bitmap);
//						if (mBitmapCache != null && mBitmapCache.get(mInfo.ImageUrl) == null) {
//							String reflect = "";
//							if (mInfo.mIsReflect)
//								reflect = "_r";
//							mBitmapCache.put(mInfo.ImageUrl+reflect, bitmap);
//							ImageUtils.saveBitmapImage(mInfo.mLocalPath,bitmap);
//							mInfo.setIsLocal(true);
//						}
//					} finally {
//						if(inputStream != null) {
//							inputStream.close();
//						}
//						entity.consumeContent();
//					}
//					return bitmap;
//				}
//			} catch(Exception e) {
//				getRequest.abort();
//				Log.e(TAG,"" + e);
//			}
//			return null;
//		}
//		
//		@Override
//		protected void onPostExecute(Bitmap bitmap) {
//			if (mInfo.mImageView != null) {
//				mInfo.mImageView.setImageBitmap(bitmap);
//			}
//			if (mOnDownloadListener != null) {
//				mOnDownloadListener.onDownloadFinish(mInfo,bitmap);
//			}
//			
//			if (isQueue) {
//				if (mTaskQueue.size() > 1) {
//					mTaskQueue.remove(this);
//					new Handler().postDelayed(new Runnable(){
//						@Override
//						public void run() {
//							mTaskQueue.get(0).execute();
//						}
//					}, 1);
//				} else if (mTaskQueue.size() == 1) {
//					mTaskQueue.remove(this);
//				}
//			}
//		}
//	}
//	
//	static class FlushedInputStream extends FilterInputStream {
//		public FlushedInputStream(InputStream inputStream) {
//			super(inputStream);
//		}
//
//		@Override
//		public long skip(long n) throws IOException {
//			long totalBytesSkipped = 0L;
//			while(totalBytesSkipped < n) {
//				long bytesSkipped = in.skip(n - totalBytesSkipped);
//				if(bytesSkipped == 0L) {
//					int bytes = read();
//					if(bytes < 0) {
//						break; // we reached EOF
//					}
//					else {
//						bytesSkipped = 1; // we read one byte
//					}
//				}
//				totalBytesSkipped += bytesSkipped;
//			}
//			return totalBytesSkipped;
//		}
//	}
//	
//    public void bitmapClear() {
//		Iterator<String> iterator = mBitmapCache.keySet().iterator();
//		while (iterator.hasNext()) {
//	        String key = (String) iterator.next();
//	        Bitmap bmp = mBitmapCache.get(key);
//	        if (bmp != null && !bmp.isRecycled()) {
//	        	mBitmapCache.get(key).isRecycled();
//	        }
//		}
//		mBitmapCache.clear();
//		mBitmapCache = null;
//    }
//    
//    public void cacheclear(){
//    	mBitmapCache.clear();
//    }
//}
